package com.lmf.juc.ThreadPool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 演示利用线程池创建多线程的案例：
 *      线程池主要分为三类：（1）一池N线程（N需要手动指定）  （2）一池一线程    （3）一池可扩容，会根据需求自动创建多个线程
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //（1）一池N线程（N需要手动指定）,这里指定线程池里面有5个线程
        ExecutorService threadPool1 = Executors.newFixedThreadPool(5);

        //（2）一池一线程
        ExecutorService threadPool2 = Executors.newSingleThreadExecutor();

        //（3）一池可扩容，会根据需求自动创建多个线程
        ExecutorService threadPool3 = Executors.newCachedThreadPool();

        //利用线程池创建多线程
        try {
            for (int i = 1; i <= 100; i++) {
                //调用execute()：创建一个线程
                threadPool3.execute(()->{
                    System.out.println(Thread.currentThread().getName() + "办理业务");
                });
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //关闭线程，将线程放回线程池
            threadPool3.shutdown();
        }
    }
}
